# 作业：
# 1、类作业，统计镰刀和斧头的数量，要使用类方法
# class Tool:
#     type1_count = 0
#     type2_count = 0
#     def __init__(self, tool_type):
#         self.tool_type = tool_type
#         if tool_type == "镰刀":
#             Tool.type1_count += 1
#         elif tool_type == "斧头":
#             Tool.type2_count += 1
#     @classmethod
#     def num_type1(self):
#         return self.type1_count
#     @classmethod
#     def num_type2(self):
#         return self.type2_count
# tool1 = Tool("镰刀")
# tool2 = Tool("镰刀")
# tool5 = Tool("斧头")
# type1_num = Tool.num_type1()
# type2_num = Tool.num_type2()
# print(f"镰刀数量为{type1_num}个")
# print(f"斧头数量为{type2_num}个")
# 2、做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法
# 存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
# 更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
# 删除学生：删除的学生将不在展示
# 展示全部学生：可以看到全部的学生姓名
# 学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！
# 以上内容，需要连接数据库，每次的数据都需要增、删、改、查去做
# import pymysql
# oyt = pymysql.connect(user = "root",password = "020529",database="zjb",host="114.55.90.154")
# cursor = oyt.cursor()
# cursor.execute("select * from zjb1;")
#
# result = cursor.fetchall()
# print(result)


import pymysql

class DB():
    def __init__(self,host,user,password,database,cursorclass = None):
        self.host = host
        self.user = user
        self.password = password
        self.databases = database
        self.cursorclass = cursorclass
    def connect(self):
        self.db = pymysql.connect(host = self.host,user = self.user,
                                  password = self.password,database = self.databases,cursorclass=self.cursorclass)
        self.cursor = self.db.cursor()
    def close(self):
        self.cursor.close() # 关闭游标
        self.db.close()
    def select_one(self,sql): # select * from student where id = 3;   10
        self.connect()
        try: # 尝试去执行sql
            self.cursor.execute(sql) # 使用游标对象，执行sql语句
            result = self.cursor.fetchone() # 返回一条数据 fetchone()
            self.close() # 最后关闭掉数据库，不要忘记
        except Exception as e:  # 如果sql执行错误
            print("select error %s"%e)
            result = None
        return result
    def __edit(self, sql):  # 相当于是一个主程序
        self.connect()  # 先连接数据库
        try:
            self.cursor.execute(sql)  # 使用游标对象，执行sql语句
            self.db.commit()  # 数据库对象提交
            result = "数据库更新成功"
        except Exception as e:
            result = "数据库更新失败" % e
        return result

    def insert(self, sql):  # insert into student(3,11,55);
        return self.__edit(sql)

    def delete(self, sql):  # delete from student where id = 3;
        return self.__edit(sql)

    def update(self, sql):  # update student set id = 3 where id =5;
        return self.__edit(sql)
db1 = DB(host = "114.55.90.154",user="root",password="020529",database = "zjb",cursorclass = pymysql.cursors.DictCursor)
print(db1.select_one('select * from zjb1;'))
print(db1.insert(insert into zjb1()))

# 3、新建学生成绩管理系统，随机生成100个 学生信息插入到数据库：
# 学生信息组成：学号、学生姓名、英语成绩、数学成绩、语文成绩、班级号（班级号有：1809A，1809B，1810A，1810B）
# 成绩划分为：优秀，良好，中等，及格，不及格。良好比中等好。
# 优秀：90—100之间（包括90）
# 良好：80-90
# 中等：70-80
# 及格：60-70
# 不合格：分数低于60分。
# 成绩管理系统提供以下方法：
# 《1》 查询所有英语成绩为优秀的、良好的、中等、及格和不合格的学生姓名和班级号
# 《2》 查询1809A，1809B，1810A，1810B每个班级的数学成绩，并且是降序返回
# 《3》 查询1809A，1809B，1810A，1810B每个班级的总人数，并且由大到小排序返回
# 《4》 查询英语、数学、语文成绩不合格的学生姓名和对应的班级号，按照不合格的人数，由大到小排序
#
# 4、定义一个图书管理系统类，图书可以新增、修改、删除，要求新增、修改、删除的图书，都要出现在数据库中
# 新增：图书名、作者名称、新建年月日
# 修改：图书名、作者名称、新建年月日
# 删除：图书删掉，且不在展示
# 查看：全量查询、精确查询、模糊查询需要用户传入形参来控制返回结果
        
        
        
        
        
        
        
        
        
        
        
